home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / demo-versionen / maxoncpp4-demo / demo / supercode / struct.h < prev    next >
C/C++ Source or Header  |  1996-12-31  |  13KB  |  589 lines

  1. #ifndef STRUCT_H
  2. #define STRUCT_H
  3. //-------------------------------------
  4. //
  5. // SuperCode (c)1996 by T.Kühn
  6. //
  7. // Programmiersprache:    ANSI-C
  8. // Projektstart:            27.12.94
  9. //
  10. //-------------------------------------
  11.  
  12. #include <stdio.h>
  13. #include <string.h>
  14. #include <limits.h>
  15. #include <exec/types.h>
  16. #include <intuition/screens.h>
  17. #include <dos/dos.h>
  18.  
  19. #define CATCOMP_NUMBERS
  20. #include <catalogs/loc.h>
  21.  
  22.  
  23. //*************************************
  24. //
  25. // DEFINES
  26. //
  27. //*************************************
  28.  
  29. #define LibVersion    37
  30.  
  31. #define TAGS            struct TagItem
  32. #define TAG_SUB(x)    TAG_MORE,(ULONG)(x)
  33. #define FINDLEN        (40)
  34.  
  35. #define DNAME            (30)
  36. #define DPATH            (130)
  37. #define DLEN            (DPATH+DNAME)
  38. #define FONTNAMESIZE    (40)
  39.  
  40. #define TAGS            struct TagItem
  41. #define TAG_SUB(x)    TAG_MORE,(ULONG)(x)
  42.  
  43. #define CTRL            (IEQUALIFIER_CONTROL)
  44. #define SHFT            (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT | IEQUALIFIER_CAPSLOCK)
  45. #define AMI                (IEQUALIFIER_LCOMMAND | IEQUALIFIER_RCOMMAND)
  46. #define ALT                (IEQUALIFIER_LALT | IEQUALIFIER_RALT)
  47.  
  48. #define blitz(x)        (*(UWORD*)0xdff180)=(x)
  49.  
  50. #define MIN(a,b)        ((a<b)?a:b)
  51. #define MAX(a,b)        ((a>b)?a:b)
  52.  
  53. //
  54. //*************************************
  55.  
  56.  
  57.  
  58. //*************************************
  59.  
  60.  
  61. //-------------------------------------
  62. // Main
  63. //-------------------------------------
  64. #define ASK_EXIT        (1<<0)
  65. #define ASK_AGAIN        (1<<1)
  66. #define ASK_CONT        (1<<2)
  67. #define ASK_SELECT    (1<<3)
  68. #define ASK_YES        (1<<4)
  69. #define ASK_NO            (1<<5)
  70. #define ASK_OK            (1<<6)
  71. #define ASK_ABORT        (1<<7)
  72. #define ASK_SAVE        (1<<8)
  73.  
  74. #define ASK_END        (9)
  75.  
  76. extern BOOL exit_flag;
  77.  
  78. ULONG display_error(ULONG error,ULONG ask ...);
  79. void Quit();
  80.  
  81.  
  82. //-------------------------------------
  83.  
  84. #define MAX_FONTNAME                (128)
  85. #define MAX_PUBSCREENNAME        (139)
  86.  
  87.  
  88. //-------------------------------------
  89. // Libs / Mem / Lists
  90. //-------------------------------------
  91. #define NT_TRY            (NT_USER-1)
  92. #define NT_Menu        (NT_USER-2)
  93. #define NT_SCORE        (NT_USER-3)
  94.  
  95. #define Empty(x)        ( ((x)->lh_TailPred) == (struct tkNode *)(x) )
  96. #define LNext(x)        ( (APTR)(x).ln_Succ )
  97. #define LPrev(x)        ( (APTR)(x).ln_Pred )
  98. #define LLast(x)        ( (APTR)(x).ln_Succ->ln_Succ == 0 )
  99. #define LFrst(x)        ( (APTR)(x).ln_Pred->ln_Pred == 0 )
  100.  
  101. struct tkNode
  102. {
  103.     struct    tkNode *ln_Succ;
  104.     struct    tkNode *ln_Pred;
  105.     UBYTE        ln_Type;
  106.     BYTE        ln_Pri;
  107.     char        *ln_Name;
  108.     void        *ln_user;
  109. };
  110.  
  111. struct tkList
  112. {
  113.     struct    tkNode *lh_Head;
  114.     struct    tkNode *lh_Tail;
  115.     struct    tkNode *lh_TailPred;
  116.     UBYTE     lh_Type;
  117.     UBYTE        lh_Pad;
  118.     UWORD        lh_Numb;
  119.     BOOL        Sort;
  120.     struct    tkNode *lh_LstNode;
  121.     struct    tkNode *lh_CurNode;
  122.     void        (*lh_Free)()
  123. };
  124.  
  125. extern struct Library *GadToolsBase,*IntuitionBase,*GfxBase,*WorkbenchBase,*CxBase,*KeymapBase,*LocaleBase,*UtilityBase,*IFFParseBase,*AslBase;
  126.  
  127. VOID Lib_Init();
  128. VOID Lib_Free();
  129. VOID Lib_Open(struct Library **Base,UBYTE *Name,ULONG Version);
  130. VOID Lib_Close(struct Library **Base);
  131.  
  132. UBYTE *Memory_Alloc(long Size);
  133. UBYTE *MemGfx_Alloc(long Size);
  134. VOID Memory_Free(UBYTE **Mem);
  135.  
  136. VOID List_Init(struct tkList *List,ULONG type,void (*Func)() );
  137. VOID List_AddTail(struct tkList *List,struct tkNode *Node);
  138. VOID List_AddSort(struct tkList *List,struct tkNode *Node,long (*Func)(const void*,const void*));
  139. VOID List_Remove(struct tkList *List,APTR Node);
  140. VOID List_Free(struct tkList *List);
  141. LONG List_FindNum(struct tkList *List,APTR Ptr,UBYTE *String);
  142. APTR List_FindPtr(struct tkList *Liste,LONG Num,UBYTE *String);
  143. LONG List_StrCmp(struct tkNode *Node1,struct tkNode *Node2);
  144. LONG List_FuncCmp(struct FuncItem *Func1,struct FuncItem *Func2);
  145. VOID List_QuickSort(struct tkNode **Array,register LONG Left,register LONG Right,LONG (*Func)(const void*,const void*));
  146. VOID List_Sort(struct tkList *List,long (*Func)(const void*,const void*));
  147. VOID List_DoAll(struct tkList *List,long (*Func)(const void*,APTR data),APTR data);
  148.  
  149. //-------------------------------------
  150.  
  151.  
  152. //-------------------------------------
  153. // Messages
  154. //-------------------------------------
  155. extern struct MsgPort *Port_Win,*Port_Wb;
  156.  
  157. ULONG wait_mask(ULONG mask);
  158.  
  159. VOID MsgPort_Init();
  160. VOID MsgPort_Free();
  161.  
  162. VOID Command_Menu(struct Menu *Menu,LONG Code);
  163. VOID Msg_GetWin();
  164. VOID Msg_GetWb();
  165. VOID Msg_GetCx();
  166. VOID Wait_All();
  167. VOID Draw_Border(struct WinBlk *Blk,struct GadInfo *Info);
  168. VOID Draw_NextBorder(struct GadInfo *Info);
  169. //-------------------------------------
  170.  
  171.  
  172. //-------------------------------------
  173. // Screen
  174. //-------------------------------------
  175. #define LIKE_WORKBENCH    (-1)
  176.  
  177. struct tkFont
  178. {
  179.     struct    TextFont *font;
  180.     struct    TextAttr attr;
  181.     UBYTE        fontname[MAX_FONTNAME+2];
  182. };
  183.  
  184. struct tkScreen
  185. {
  186.     WORD                    Width,Height,Depth;    // Screen-Defines
  187.     ULONG                    Mode;
  188.     ULONG                    OverScan;
  189.     BOOL                    Public;
  190.     BOOL                    Private;
  191.     UBYTE                    PubName[MAX_PUBSCREENNAME+2];
  192.  
  193.     struct tkFont        tkfont;
  194.     struct Screen        *Scrn;
  195.     BOOL                    FlgOwn;
  196.     BOOL                    FlgWB;
  197.     BOOL                    FlgPublic;
  198.     BOOL                    FlgPrivate;
  199.  
  200.     APTR                    Visual;
  201.     struct DrawInfo    *DrawInfo;
  202.     LONG                    Xmul,Ymul;
  203.     LONG                    Xres,Yres;
  204. };
  205.  
  206. #define MAX_COL    (16)
  207.  
  208. extern UWORD Reg_Col[MAX_COL+2];
  209. extern UBYTE PUB_WB[];
  210. extern struct tkScreen Scrn;
  211.  
  212. VOID    Screen_Init(struct tkScreen *Scr);
  213. ULONG    Screen_Open(struct tkScreen *Scr);
  214. ULONG    Screen_Close(struct tkScreen *Scr);
  215. VOID Font_Open(struct tkFont *tkfont);
  216. VOID Font_Close(struct tkFont *tkfont);
  217.  
  218. //-------------------------------------
  219.  
  220.  
  221. //-------------------------------------
  222. // Menus.c
  223. //-------------------------------------
  224. struct tkNewMenu
  225. {
  226.     UBYTE        Type;
  227.     ULONG        LocText;
  228.     VOID        (*Func)();
  229.     BOOL        *Toggle;
  230.     UBYTE        CommKey[2];
  231. };
  232.  
  233. struct tkMenu
  234. {
  235.     struct    tkNode Node;
  236.     struct    Menu *Menu;
  237.     struct    NewMenu *Mem;
  238.     UWORD        Number;
  239.     struct    tkNewMenu *OrgMenu;
  240. };
  241.  
  242. extern struct tkMenu Menu_Main;
  243.  
  244. VOID Menu_Layout();
  245. VOID Menu_Init();
  246. VOID Menu_Free();
  247.  
  248. //-------------------------------------
  249.  
  250.  
  251. //-------------------------------------
  252. // Locale
  253. //-------------------------------------
  254. extern struct Locale *locale;
  255.  
  256. VOID loc_init(char *language);
  257. VOID loc_free();
  258. char *CatStr(LONG StrNum);
  259.  
  260. //-------------------------------------
  261.  
  262.  
  263. //-------------------------------------
  264. // Prefs
  265. //-------------------------------------
  266. #define MAX_PLAYERNAME    (20)
  267.  
  268. struct PrefWin
  269. {
  270.     WORD Xpos,Ypos,WinW,WinH;
  271.     BOOL Open;
  272. };
  273.  
  274. #define PREFSHEAD        'PREF'
  275. #define INDSCREEN        'SCRN'
  276. #define VERSCREEN        '1.00'
  277. struct SetScreen
  278. {
  279.     ULONG                    scr_width,scr_height,scr_depth,scr_mode;
  280.     UWORD                    scr_overscan;
  281.     BOOL                    scr_public;
  282.     UBYTE                    scr_pubname[MAX_PUBSCREENNAME+2];
  283.  
  284.     struct TextAttr    fontattr;
  285.     UBYTE                    fontname[MAX_FONTNAME+2];
  286. };
  287.  
  288. #define INDGAME        'GAME'
  289. #define VERGAME        '1.01'
  290. struct SetGame
  291. {
  292.     UWORD                    num_columns;
  293.     UWORD                    num_colors;
  294.     UWORD                    max_equal;
  295.     WORD                    val_order;
  296.     WORD                    display;
  297.     UBYTE                    player_name[MAX_PLAYERNAME+2];
  298.     UBYTE                    save_file[FILENAME_MAX+2];
  299. };
  300.  
  301. #define INDWINDOW        'WIND'
  302. #define VERWINDOW        '1.01'
  303. struct SetWindow
  304. {
  305.     struct PrefWin        game;
  306.     struct PrefWin        font;
  307.     struct PrefWin        file;
  308.     struct PrefWin        scrn;
  309.     struct PrefWin        score;
  310.     struct PrefWin        prefs;
  311. };
  312.  
  313. struct tkPrefs
  314. {
  315.     struct SetScreen    scr;
  316.     struct SetGame        game;
  317.     struct SetWindow    win;
  318. };
  319.  
  320. extern struct tkPrefs *prg_prefs;
  321.  
  322. void prefs_windowopen();
  323. void prefs_windowclose();
  324. LONG prefs_getbit();
  325. VOID prefs_domsg();
  326.  
  327. void prefs_init();
  328. void prefs_free();
  329.  
  330. void prefs_setscreen();
  331. LONG prefs_askscreen();
  332. void prefs_setfont();
  333. LONG prefs_askfont(struct TextAttr *attr);
  334.  
  335. LONG prefs_askfile(UBYTE *title,UBYTE *filename,LONG size,LONG save);
  336.  
  337. void prefs_load();
  338. void prefs_save();
  339.  
  340.  
  341. //-------------------------------------
  342.  
  343.  
  344. //-------------------------------------
  345. // BOOPSI.c
  346. //-------------------------------------
  347. #include <intuition/classes.h>
  348.  
  349. #define GA_TextCol        (TAG_USER+1)
  350. #define GA_TextJust        (TAG_USER+2)
  351. #define GA_BoxCol            (TAG_USER+3)
  352. #define GA_BoxBorder        (TAG_USER+4)
  353. #define GA_Font            (TAG_USER+5)
  354. #define GA_Symbol            (TAG_USER+6)
  355. #define GA_Special        (TAG_USER+7)
  356. #define GA_Integer        (TAG_USER+8)
  357. #define GA_Float            (TAG_USER+9)
  358.  
  359. #define LV_List            (TAG_USER+101)
  360. #define LV_Top                (TAG_USER+102)
  361. #define LV_Show            (TAG_USER+103)
  362. #define LV_ChangeLine    (TAG_USER+104)
  363. #define LV_ChangeTotal    (TAG_USER+105)
  364. #define LV_Select            (TAG_USER+106)
  365.  
  366. #define LINE_TOP            (0x80000000+1)
  367. #define LINE_PAGEUP        (0x80000000+2)
  368. #define LINE_UP            (0x80000000+3)
  369. #define LINE_END            (0x80000000+4)
  370. #define LINE_PAGEDOWN    (0x80000000+5)
  371. #define LINE_DOWN            (0x80000000+6)
  372. #define SHOW_SELECTED    (0x80000000+7)
  373.  
  374. enum SymbolType
  375. {
  376.     SYMBOL_NONE,
  377.     SYMBOL_FILEREQUEST,
  378.     SYMBOL_FONTREQUEST,
  379.     SYMBOL_SCRNMODEREQUEST,
  380.     SYMBOL_PUBSCRNREQUEST,
  381.     SYMBOL_ARROWUP,
  382.     SYMBOL_ARROWDOWN,
  383.     SYMBOL_ARROWLEFT,
  384.     SYMBOL_ARROWRIGHT,
  385.     SYMBOL_CHECKPOINT,
  386. };
  387.  
  388. VOID Class_Init(void);
  389. BOOL Class_Free(void);
  390.  
  391. VOID DrawBox(struct RastPort *rp,struct DrawInfo *drinfo,ULONG x,ULONG y,ULONG w,ULONG h,BOOL Border);
  392. LONG Txt_DimX(struct RastPort *rp,UBYTE *String,ULONG Size);
  393. VOID Txt_PrintFit(struct RastPort *rp,UBYTE *txt,ULONG n,ULONG x,ULONG y,ULONG w,ULONG h,ULONG fg,ULONG bg,ULONG flag);
  394.  
  395. #define BOX_RIGHT        (1<<1)
  396. #define BOX_LEFT        (1<<2)
  397. #define BOX_CENTER    (1<<3)
  398. #define BOX_FILL        (1<<4)
  399.  
  400. extern Class *class_button;
  401. extern Class *class_text;
  402. extern Class *class_symbol;
  403.  
  404. //-------------------------------------
  405.  
  406.  
  407. //-------------------------------------
  408. // Strings
  409. //-------------------------------------
  410.  
  411. UBYTE *StrCopy(UBYTE *dest, UBYTE *src, ULONG max);
  412. UBYTE *StrAdd(UBYTE *dest, UBYTE *src, ULONG max);
  413.  
  414. //-------------------------------------
  415.  
  416.  
  417. //-------------------------------------
  418. // File.c
  419. //-------------------------------------
  420. struct tkfile
  421. {
  422.     BPTR        file;
  423.     BOOL        ok;
  424.     LONG        error;
  425.     UBYTE        *name;
  426. };
  427.  
  428. #define ASKFILE_OVERWRITE (1<<0)
  429. #define ASKFILE_CANTOPEN  (1<<1)
  430.  
  431. struct tkfile *file_open(STRPTR name,LONG accessmode,LONG ask);
  432. void file_free(struct tkfile **fileptr);
  433. void file_write(struct tkfile *file,APTR buffer,LONG size);
  434. void file_writelong(struct tkfile *file,ULONG buf);
  435. void file_read(struct tkfile *file,APTR buffer,LONG size);
  436. ULONG file_readlong(struct tkfile *file);
  437. LONG file_seek(struct tkfile *file,LONG newpos,LONG offset);
  438. void file_saveblock(struct tkfile *file,ULONG ind,ULONG ver,ULONG size,APTR block);
  439. void file_loadblock(struct tkfile *file,ULONG ver,ULONG size,APTR block);
  440. void file_delete(UBYTE *name);
  441.  
  442.  
  443. //-------------------------------------
  444.  
  445.  
  446. //-------------------------------------
  447. // window.c
  448. //-------------------------------------
  449. void window_close(struct Window *win,struct PrefWin *pref);
  450.  
  451. //-------------------------------------
  452.  
  453.  
  454. //-------------------------------------
  455. // SuperCode
  456. //-------------------------------------
  457. #define WHITE    (1)
  458. #define BLACK    (2)
  459.  
  460. enum order
  461. {
  462.     ORDER_POS,
  463.     ORDER_DESC,
  464.     ORDER_RANDOM,
  465. };
  466.  
  467. #define GAMEPLAYER        'PLAY'
  468. #define VERGAMEPLAYER    '1.01'
  469.  
  470. struct Field
  471. {
  472.     ULONG                columns;
  473.     ULONG                num_colors;
  474.     ULONG                max_equal;
  475.     BOOL                started;
  476.     BOOL                finish;
  477.     BOOL                giveup;
  478.     WORD                val_order;
  479.     ULONG                lines;                
  480.     ULONG                sec_start;
  481.     ULONG                sec_finish;
  482.     struct tkList    try;
  483. };
  484.  
  485. #define GAMEENTRY            'GAME'
  486. #define VERGAMEENTRY        '1.00'
  487.  
  488. struct GameEntry
  489. {
  490.     struct tkNode    node;
  491.     LONG                size;
  492.     UBYTE                *field;
  493.     UBYTE             *value;
  494. };
  495.  
  496. extern struct Field player1;
  497.  
  498. void code_init();
  499. void code_free();
  500.  
  501. ULONG random(ULONG n);
  502.  
  503. ULONG code_getpoints(struct Field *player);
  504. struct GameEntry *code_getnexttry(struct GameEntry *old);
  505. struct GameEntry *code_getprevtry(struct GameEntry *old);
  506. struct GameEntry *code_get1sttry(struct Field *player);
  507. struct GameEntry *code_getnumtry(struct Field *player,LONG n);
  508. struct GameEntry *code_getcombi(struct Field *player);
  509. struct GameEntry *code_getlsttry(struct Field *player);
  510.  
  511. void code_freefield(struct Field *player);
  512.  
  513. void code_giveup(struct Field *player);
  514. struct GameEntry *code_newfield(struct Field *player);
  515. void code_newcomb(struct Field *player);
  516. void code_set(struct Field *player,ULONG pos,ULONG value);
  517. ULONG code_getfield(struct Field *player,struct GameEntry *entry,ULONG pos);
  518. ULONG code_getvalue(struct Field *player,struct GameEntry *entry,ULONG pos);
  519. void code_comparelast(struct Field *player);
  520.  
  521. //-------------------------------------
  522.  
  523.  
  524. //-------------------------------------
  525. // SuperCodeWindow
  526. //-------------------------------------
  527. enum display
  528. {
  529.     DISPLAY_COLORS,
  530.     DISPLAY_LETTER,
  531. };
  532.  
  533. void supercode_newgame();
  534. void supercode_newplayer();
  535. void supercode_giveup();
  536.  
  537. LONG supercode_getbit();
  538. void supercode_domsg();
  539. void supercode_open();
  540. void supercode_close();
  541. void supercode_init();
  542. void supercode_free();
  543.  
  544. void supercode_about();
  545.  
  546. void supercode_savegame();
  547. void supercode_loadgame();
  548.  
  549.  
  550.  
  551. //-------------------------------------
  552.  
  553.  
  554. //-------------------------------------
  555. // HighScores
  556. //-------------------------------------
  557. struct Score
  558. {
  559.     struct tkNode        node;
  560.     ULONG                    score;
  561.     WORD                    columns;
  562.     WORD                    colors;
  563.     WORD                    equals;
  564.     WORD                    lines;
  565.     WORD                    order;
  566.     char                    name[MAX_PLAYERNAME+2];
  567.     struct DateStamp         date;
  568.     ULONG                    time;
  569. };
  570.  
  571. void score_display();
  572. void score_add(struct Field *player,UBYTE *name);
  573.  
  574. void score_init();
  575. void score_free();
  576. LONG score_getbit();
  577. VOID score_domsg();
  578.  
  579. //-------------------------------------
  580.  
  581. //*************************************
  582.  
  583.  
  584.  
  585.  
  586. //-------------------------------------
  587. #endif
  588.  
  589.